import logging
import os
import time

from utils.get_file_abspath import get_log_path

log_path = get_log_path()

# 如果文件夹不存在，创建一个文件夹
if not os.path.exists(log_path):
    os.mkdir(log_path)


class Logger:
    def __init__(self, log_name, level=logging.DEBUG):
        # 定义日志位置和文件名
        self.logname = os.path.join(log_path, f"{time.strftime('%Y-%m-%d')}_{log_name}.log")
        # 定义一个日志容器
        self.logger = logging.getLogger(log_name)
        self.logger.setLevel(level)
        self.logger.propagate = False  # 防止日志重复输出
        # 创建日志输入的格式
        self.formater = logging.Formatter(
            '[%(asctime)s][%(filename)s %(lineno)d][%(levelname)s]: %(message)s')
        # 创建日志处理器，用来存放日志文件
        self.filelogger = logging.FileHandler(self.logname, mode='a', encoding="UTF-8")
        self.filelogger.setLevel(level)
        self.filelogger.setFormatter(self.formater)
        # 创建日志处理器，在控制台打印
        self.console = logging.StreamHandler()
        self.console.setLevel(level)
        self.console.setFormatter(self.formater)
        # 将日志输出渠道添加到日志收集器中
        self.logger.addHandler(self.filelogger)
        self.logger.addHandler(self.console)


class LoggerForRequests(Logger):
    def __init__(self, general_logger):
        super().__init__(log_name="requests", level=logging.DEBUG)
        # 将 general_logger 的处理器添加到 requests 记录器中
        for handler in general_logger.handlers:
            self.logger.addHandler(handler)


# 创建 general 记录器
general_logger = Logger(log_name="general").logger

# 创建 requests 记录器，并将 general 记录器的处理器添加到 requests 记录器中
logger_for_requests = LoggerForRequests(general_logger).logger
logger = general_logger
